SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
Create Procedure [dbo].[SP_TTCANP_ANUL_D01]    
/*-------------------------------------------------------*/    
/*---Empresa              : OFISIS S.A.                --*/    
/*---Cliente              : OFISIS                 --*/    
/*---Sistema              : Tesoreria                  --*/    
/*---M÷dulo               : Empresa                    --*/    
/*---Programa             : Anulaci¸n Canje Letras     --*/    
/*---Script               : ttcanp_anul.sql            --*/    
/*---Nombre SP            : SP_TCCANP_ANUL_D01         --*/    
/*---Desarrollado por     : Javier Flores A.           --*/    
/*---Fecha Creaci÷n       : 19/08/1999                 --*/    
/*---Base Datos           : Microsoft Sql Server       --*/    
/*---Versi÷n              : 7.0                        --*/    
/*---Invoca a SP          :                            --*/    
/*-------------------------------------------------------*/    
    
/*-------------------------------------------------------*/    
/*---Modificado 1 por     :DCH                         --*/    
/*---Fecha Modificaci÷n   :14/03/2002                  --*/     
/*---Detalle Modificaci÷n :Permitir anular canje para las */    
/*                         letras orÑgenes            --*/    
/*-------------------------------------------------------*/    
/*-------------------------------------------------------*/    
/*---Modificado 2 por     : Maribel Julca Rodriguez    --*/    
/*---Fecha Modificaci©n   : 21/04/2005                 --*/     
/*---Detalle Modificaci©n : ingreso de los campos CO_USUA_CREA, CO_USUA_MODI  --*/    
/*-------------------------------------------------------*/    
    
/*-------------------------------------------------------*/    
/*---Comentarios                                       --*/    
/*---                                                  --*/    
/*---                                                  --*/    
/*-------------------------------------------------------*/    
    
/*-------------------------------------------------------*/    
/*---Drop Proc SP_TTCANP_ANUL_D01                      --*/    
/*---Grant Execute on SP_TTCANP_ANUL_D01 to public         --*/     
/*---SP_TTCANP_ANUL_D01                                --*/    
/*-------------------------------------------------------*/    
 @ISCO_EMPR      TD_VC_002,     
 @ISCO_USUA_MODI TD_VC_008_USUA,    
 @ISCO_PROV      TD_VC_020,    
 @ISNU_CANJ      TD_VC_008,    
 @ISCO_TIPO_OPER TD_VC_003,    
 @IDFE_ANUL      TD_DT_001,    
 @ISCO_UNID_CONC TD_VC_003,    
 @IDFE_CANJ      TD_DT_001  
As  
Declare  @CSCO_TIPO_DOCU   TD_VC_003,     
         @CSNU_DOCU_PROV   TD_VC_020,     
         @CSNU_LETR_PROV   TD_VC_020,    
         @CNIM_CANJ_MDOC   TD_NU_016_004,    
         @CSCO_ESTA_ORIG   TD_VC_003,    
         @VSCO_ESTA_LETR   TD_VC_003,    
         @VNNU_SECU        TD_IN_001,    
         @OSTI_DOCU      TD_VC_003,    
         @OSTI_DOCU_CDRE   TD_VC_003, -- Tipo de Documento Compromiso de Retenci½n    
         @OSTI_DOCU_CDDE   TD_VC_003, -- Tipo de Documento Constancia de Detracción
         @VSCO_TIPO_EGAN   TD_VC_003,       
         @VSST_GEAS_ANUL   TD_VC_001,    
         @VSCO_TIPO_OPE1   TD_VC_003,  
      @OSNU_ASTO       TD_VC_010,  
      @VSST_INTE_BACH  TD_VC_001,  
      @VSST_ASTO_RESU  TD_VC_001,  
      @VSTI_OPNI_CARG  TD_VC_001,  
      @VSTI_OPNI_ABON  TD_VC_001  
    
 Select @OSTI_DOCU = Null    
     
 EXECUTE SP_TTDOCU_CNTB_Q01 6, @OSTI_DOCU OUTPUT    
 EXECUTE SP_TTDOCU_CNTB_Q01 22, @OSTI_DOCU_CDRE OUTPUT    
 EXECUTE SP_TTDOCU_CNTB_Q01 23, @OSTI_DOCU_CDDE OUTPUT    
    
 Begin Tran SP_TCCANJ_PROV_I01    
       
    Declare CU_TCCANJ_PROV_I01_1 cursor    
    For    
    Select CO_TIPO_DOCU, NU_DOCU_PROV, NU_LETR_PROV, IM_CANJ_MDOC, CO_ESTA_ORIG    
    From   TDCANJ_PROV    
    Where  CO_EMPR = @ISCO_EMPR    
    And CO_PROV = @ISCO_PROV    
    And CO_UNID_CONC = @ISCO_UNID_CONC    
    And NU_CANJ = @ISNU_CANJ    
    And FE_CANJ = @IDFE_CANJ    
     
    Open CU_TCCANJ_PROV_I01_1    
    Fetch CU_TCCANJ_PROV_I01_1     
    Into @CSCO_TIPO_DOCU, @CSNU_DOCU_PROV, @CSNU_LETR_PROV, @CNIM_CANJ_MDOC, @CSCO_ESTA_ORIG    
       
    While (@@FETCH_STATUS = 0)    
      Begin    
        If (@@FETCH_STATUS < 0)    
        Begin    
          RAISERROR 20001 'FIN DE ARCHIVO'    
          Close CU_TCCANJ_PROV_I01_1    
          Deallocate CU_TCCANJ_PROV_I01_1    
          Rollback tran    
          Return    
        End    
     
        If @CSNU_DOCU_PROV Is Not Null And @CSCO_TIPO_DOCU Is Not Null    
   Begin    
    If @CSCO_TIPO_DOCU != @OSTI_DOCU_CDRE   and @CSCO_TIPO_DOCU != @OSTI_DOCU_CDDE
       Begin    
         If @CSCO_TIPO_DOCU != @OSTI_DOCU     
          Update TMDOCU_PROV     
          Set   CO_ESTA_DOCU = @CSCO_ESTA_ORIG,     
               NU_CANJ = NULL,    
               IM_PAGA = IM_PAGA - ISNULL(@CNIM_CANJ_MDOC,0),    
               CO_USUA_MODI = @ISCO_USUA_MODI, FE_USUA_MODI = GETDATE()    
               Where  CO_EMPR = @ISCO_EMPR    
               And CO_PROV = @ISCO_PROV    
               And CO_TIPO_DOCU = @CSCO_TIPO_DOCU    
               And NU_DOCU_PROV = @CSNU_DOCU_PROV    
         Else    
          Update TMLETR_PROV     
          Set   CO_ESTA_DOCU = @CSCO_ESTA_ORIG,     
            NU_CANJ = NULL,    
            IM_PAGA = IM_PAGA - ISNULL(@CNIM_CANJ_MDOC,0),    
            CO_USUA_MODI = @ISCO_USUA_MODI, FE_USUA_MODI = GETDATE()    
            Where  CO_EMPR = @ISCO_EMPR    
            And CO_PROV = @ISCO_PROV    
            And NU_LETR_PROV = @CSNU_DOCU_PROV    
       End    
     Else Begin    
                Update TMDOCU_PROV     
         Set   CO_ESTA_DOCU = 'ANU',     
             NU_CANJ = NULL,    
             CO_USUA_MODI = @ISCO_USUA_MODI, FE_USUA_MODI = GETDATE()    
             Where  CO_EMPR = @ISCO_EMPR    
             And CO_PROV = @ISCO_PROV    
             And CO_TIPO_DOCU = @CSCO_TIPO_DOCU    
             And NU_DOCU_PROV = @CSNU_DOCU_PROV    
   End    
    End    
        Else    
          Begin    
           Select @VSCO_ESTA_LETR = CO_ESTA_DOCU     
           From   TMLETR_PROV    
           Where  CO_EMPR = @ISCO_EMPR    
           And    CO_PROV = @ISCO_PROV    
           And    NU_LETR_PROV = @CSNU_LETR_PROV    
    
           Update TMLETR_PROV     
    Set    CO_ESTA_DOCU = 'ANU',     
           CO_USUA_MODI = @ISCO_USUA_MODI,    
           FE_USUA_MODI = GETDATE()    
           Where  CO_EMPR = @ISCO_EMPR    
           And CO_PROV = @ISCO_PROV    
              And NU_LETR_PROV = @CSNU_LETR_PROV    
    
           If @@error <> 0    
              Begin     
                Close CU_TCCANJ_PROV_I01_1    
                Deallocate CU_TCCANJ_PROV_I01_1    
                Rollback tran    
                Return      
              End     
    
           Select @VNNU_SECU = ISNULL(Max(NU_SECU),0) + 1    
           From   TDKARD_DOCP    
           Where  CO_EMPR = @ISCO_EMPR    
    
           Insert Into TDKARD_DOCP (CO_EMPR, NU_SECU,CO_TIPO_DOCU, NU_DOCU_PROV, CO_PROV, CO_ESTA_ACTU,    
                               CO_ESTA_DOCU, CO_USUA_CREA,FE_USUA_CREA, CO_USUA_MODI, FE_USUA_MODI)    
           Values ( @ISCO_EMPR, @VNNU_SECU , @OSTI_DOCU, @CSNU_LETR_PROV, @ISCO_PROV,    
             'ANU',  @VSCO_ESTA_LETR, @ISCO_USUA_MODI,GETDATE(), @ISCO_USUA_MODI, GETDATE())      
     
           If @@error <> 0    
              Begin    
                Rollback tran    
                Return    
              End        
          End    
    
       Fetch CU_TCCANJ_PROV_I01_1 Into @CSCO_TIPO_DOCU, @CSNU_DOCU_PROV, @CSNU_LETR_PROV,     
      @CNIM_CANJ_MDOC, @CSCO_ESTA_ORIG    
        
     End    
    
     Close CU_TCCANJ_PROV_I01_1    
     Deallocate CU_TCCANJ_PROV_I01_1    
    
     SELECT @VSCO_TIPO_EGAN = CO_TIPO_OPEG, @VSST_GEAS_ANUL = ST_GEAS_ANUL    
     FROM   TMPARA_TESO     
     WHERE  CO_EMPR = @ISCO_EMPR    
    
     If @VSST_GEAS_ANUL = 'N'    
        Select @VSCO_TIPO_OPE1 = @VSCO_TIPO_EGAN    
     Else        
       Select @VSCO_TIPO_OPE1 = @ISCO_TIPO_OPER     
  
 -- Si la Fecha de Anulacion es Mayor --E X T O R N O--  --  
If  @IDFE_CANJ < @IDFE_ANUL And Month( @IDFE_CANJ ) != Month( @IDFE_ANUL )  
      Update  TCCANJ_PROV     
      Set TI_SITU = 'EXT',     
          CO_TIPO_OPER = @VSCO_TIPO_OPE1,    
          CO_USUA_MODI = @ISCO_USUA_MODI,     
          FE_USUA_MODI = GETDATE()    
      Where   CO_EMPR = @ISCO_EMPR    
        And CO_PROV = @ISCO_PROV    
        And CO_UNID_CONC = @ISCO_UNID_CONC    
        And NU_CANJ = @ISNU_CANJ    
        And FE_CANJ = @IDFE_CANJ    
  
Else  
      Update  TCCANJ_PROV     
      Set TI_SITU = 'ANU',     
          CO_TIPO_OPER = @VSCO_TIPO_OPE1,    
          CO_USUA_MODI = @ISCO_USUA_MODI,     
          FE_USUA_MODI = GETDATE()    
      Where   CO_EMPR = @ISCO_EMPR    
        And CO_PROV = @ISCO_PROV    
        And CO_UNID_CONC = @ISCO_UNID_CONC    
        And NU_CANJ = @ISNU_CANJ    
        And FE_CANJ = @IDFE_CANJ     
If @@error <> 0    
Begin    
 RollBack Tran SP_TTAMAR_NCPA_D01  
 Return    
End    
  
  
/**-----Verifica si es interface en Linea s/n------*/  
Select @VSST_INTE_BACH = ST_INTE_BACH,    
  @VSTI_OPNI_CARG = CO_TIPO_OPEG,   
        @VSTI_OPNI_ABON = CO_TIPO_OPER    
From TMPARA_TESO   
Where CO_EMPR = @ISCO_EMPR  
  
/**-----Verifica si se genera asientos Resumidos ------*/   
Select @VSST_ASTO_RESU = Max(IsNull( t1.ST_ASTO_RESU, 'S'))        
From   TMOPRC_RESU t1 , TDTIPO_OPER t2        
Where  t2.CO_EMPR = @ISCO_EMPR   
And    t2.CO_TIPO_OPER = @ISCO_TIPO_OPER   
And    t1.CO_EMPR = t2.CO_EMPR   
And    t1.CO_OPRC_CNTB = t2.CO_OPRC_CNTB  
  
/**-----Fin de la Validacion de Asientos Resumidos e Interfase en Bach ------*/   
If @VSST_INTE_BACH = 'N' AND @VSST_ASTO_RESU = 'N' AND   
 @ISCO_TIPO_OPER != @VSTI_OPNI_CARG AND @ISCO_TIPO_OPER != @VSTI_OPNI_ABON And  
 @IDFE_CANJ < @IDFE_ANUL And Month( @IDFE_CANJ ) != Month( @IDFE_ANUL )    
Begin  
    
 /*-----Optiene el Numero de Asiento -----*/      
 EXEC SP_TTULTI_ASTO_Q01 @ISCO_EMPR, @ISCO_USUA_MODI, @ISCO_UNID_CONC, @VSCO_TIPO_OPE1, @IDFE_ANUL, @OSNU_ASTO OUTPUT    
 IF (@@ERROR != 0)        
 Begin    
  RollBack Tran  SP_TTAMAR_NCPA_D01  
  Return    
 End    
  
End    
  
    
     Insert Into TTCANP_ANUL (CO_EMPR, CO_UNID_CONC, CO_PROV,  NU_CANJ, FE_CANJ, CO_TIPO_OPER, FE_ANUL,    
ST_CONT,CO_USUA_CREA,FE_USUA_CREA, CO_USUA_MODI, FE_USUA_MODI, NU_ASTO)    
     Values (@ISCO_EMPR, @ISCO_UNID_CONC, @ISCO_PROV,  @ISNU_CANJ, @IDFE_CANJ, @VSCO_TIPO_OPE1,  @IDFE_ANUL, 'N',    
@ISCO_USUA_MODI,GETDATE(), @ISCO_USUA_MODI, GETDATE(), @OSNU_ASTO)    
    
     If @@error <> 0    
        Begin    
          Rollback tran    
          Return    
        End    
    
  commit tran    
     
/*------------------------ Fin ------------------------------*/  


GO
